/* eslint-disable no-nested-ternary */
import * as api from './api';
import {
    getCurrentUserPagePermissionsApi,
    getCurrentUserPagePermissionsFail,
    getCurrentUserPagePermissionsSuccess,
} from 'Shared/actions/currentUserContext';
import {PAGE_CODE} from './constants';
export const GET_INIT_DATA_BEGIN = 'GET_INIT_DATA_BEGIN';
export const GET_INIT_DATA_SUCCESS = 'GET_INIT_DATA_SUCCESS';
export const GET_INIT_DATA_FAIL = 'GET_INIT_DATA_FAIL';
import {conventTableCondition} from '../utils';

/*==============================初始化或清理数据================================= */
//清除数据
export const CLEAR_DATA = 'CLEAR_DATA';
export const clearData = () => ({
    type: CLEAR_DATA
});

const getInitDataBegin = () => ({
    type: GET_INIT_DATA_BEGIN
});

const getInitDataSuccess = data => ({
    type: GET_INIT_DATA_SUCCESS,
    data
});

const getInitDataFail = () => ({
    type: GET_INIT_DATA_FAIL
});

/*==============================初始化API================================= */
//获取初始化数据和权限
export const getInitData = () => dispatch => {
    dispatch(getInitDataBegin());
    const init = api.getInitData().then(res => {
        if(res.ok)
            dispatch(getInitDataSuccess(res.data));
        else
            dispatch(getInitDataFail());
        return res.ok;
    });
    const permissions = getCurrentUserPagePermissionsApi(PAGE_CODE).then(res => {
        if(res.isOk) dispatch(getCurrentUserPagePermissionsSuccess(res.data));
        else dispatch(getCurrentUserPagePermissionsFail(res.statusCode, res.message));
        return res.isOk;
    });
    return Promise.all([init, permissions]).then(values => values[0] && values[1]);
};

/*==============================查询列表================================= */
export const GET_LIST_DATA_BEGIN = 'GET_LIST_DATA_BEGIN';
export const GET_LIST_DATA_SUCCESS = 'GET_LIST_DATA_SUCCESS';
export const GET_LIST_DATA_FAIL = 'GET_LIST_DATA_FAIL';
const getListDataBegin = () => ({
    type: GET_LIST_DATA_BEGIN
});

const getListDataSuccess = (condition, data) => ({
    type: GET_LIST_DATA_SUCCESS,
    condition,
    data
});

const getListDataFail = () => ({
    type: GET_LIST_DATA_FAIL
});

//获取查询列表
export const getList = condition => dispatch => {
    dispatch(getListDataBegin());
    return api.getList(condition).then(res => {
        if(res.ok)
            dispatch(getListDataSuccess(condition, res.data));
        else
            dispatch(getListDataFail());
    });
};
//修改查询条件
export const SAVE_QUERY_CONDITION = 'SAVE_QUERY_CONDITION';
export const saveQueryCondition = (name, value) => ({
    type: SAVE_QUERY_CONDITION,
    name,
    value
});

//重置查询条件
export const RESET_QUERY_PANEL = 'RESET_QUERY_PANEL';
export const resetQueryPanel = () => ({
    type: RESET_QUERY_PANEL,
});

//选择查询条件
export const SAVE_QUERY_DEALER = 'SAVE_QUERY_DEALER';
export const saveQueryDealer = data => ({
    type: SAVE_QUERY_DEALER,
    data
});

export const SAVE_QUERY_MARKE = 'SAVE_QUERY_MARKE';
export const saveMarkeQuery = data => ({
    type: SAVE_QUERY_MARKE,
    data
});

export const SAVE_QUERY_AREA = 'SAVE_QUERY_AREA';
export const saveAreaQuery = data => ({
    type: SAVE_QUERY_AREA,
    data
});

// 批量生效
export const START_BATCH_SX = 'START_BATCH_SX';
export const startBatchSX = () => ({
    type: START_BATCH_SX
});

export const CLEAR_BATCH_SX = 'CLEAR_BATCH_SX';
export const clearBatchSX = () => ({
    type: CLEAR_BATCH_SX,
});


// 批量作废
export const START_BATCH_ZF = 'START_BATCH_ZF';
export const startBatchZF = () => ({
    type: START_BATCH_ZF
});

export const CLEAR_BATCH_ZF = 'CLEAR_BATCH_ZF';
export const clearBatchZF = () => ({
    type: CLEAR_BATCH_ZF,
});

// 批量生成滚动计划
export const START_BATCH_GD = 'START_BATCH_GD';
export const startBatchGD = () => ({
    type: START_BATCH_GD
});

export const CLEAR_BATCH_GD = 'CLEAR_BATCH_GD';
export const clearBatchGD = () => ({
    type: CLEAR_BATCH_GD,
});
 

/*==============================导出================================= */
export const exportData = () => (dispatch, getState) => {
    const queryCondition = getState().getIn(['page', 'appState', 'queryCondition']).toJS();
    return api.exports(conventTableCondition(queryCondition));
};

//按钮搜索
export const querySearch = () => (dispatch, getState) => {
    const condition = getState()
        .getIn(['page', 'appState', 'queryCondition'])
        .toJS();
    dispatch(getList(condition));
};
//分页排序搜索
export const tableSearch = page => (dispatch, getState) => {
    const query = getState()
        .getIn(['page', 'appState', 'queryBySort'])
        .toJS();
    const condition = Object.assign({}, query, page);
    dispatch(getList(condition));
};
